package com.red.controller;

import com.red.pojo.Page;
import com.red.pojo.Result;
import com.red.pojo.entity.User;
import com.red.service.IUserService;
import com.red.util.HttpStatusUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.List;

@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    private IUserService userService;

    /**
     * 添加用户信息
     *
     * @param user 用户信息
     * @return 添加结果
     */
    @PostMapping
    public Result insert(User user) {
        return userService.insertUser(user) > 0 ? Result.success() : Result.error();
    }

    /**
     * 带条件的分页用户查询
     *
     * @param user 筛选条件
     * @param page 请求页
     * @param size 长度
     * @return 用户信息集合与分页信息
     */
    @GetMapping("/list/{page}/{size}")
    public Result list(User user, @PathVariable int page, @PathVariable int size) {
        ArrayList<Object> payload = new ArrayList<>();

        if (size < 1 || size > 100) {
            return Result.error("size不可接受");
        }

        Page page1 = new Page(userService.selectUserCount(user), page, size);
        List<User> users = userService.selectUserList(user, page1.getCurrent(), page1.getSize());

        payload.add(users);
        payload.add(page1);

        return new Result(HttpStatusUtil.SUCCESS, "获取成功", payload);
    }

    /**
     * 通过 ID 删除用户
     *
     * @param userId 用户ID
     * @return 删除结果
     */
    @DeleteMapping
    public Result delete(@RequestParam("userId") int userId) {
        int i = userService.deleteUserByID(userId);
        return i > 0 ? Result.success() : Result.error();
    }

    /**
     * 更新用户信息
     *
     * @param user 用户更改信息
     * @return 更新结果
     */
    @PutMapping
    public Result update(User user) {
        if (user.getUserId() == 0) {
            return Result.error("缺少ID");
        }

        return userService.updateUser(user) > 0 ? Result.success() : Result.error();
    }
}